package com.heima.wemedia.interceptor;

import com.heima.model.wemedia.pojos.WmUser;
import com.heima.utils.common.WmThreadLocalUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//需要从handler请求头中获取用户信息 那么就在服务中加拦截器,
// 在方法功能执行前获取用户id存入线程在对应业务中再从线程中获取用户id就知道此时上传图片的素材的用户是谁,就知道这个数据存在谁的名下
//将对应的素材地址添加进去
public class WmTokenInterceptor implements HandlerInterceptor {
        //前置处理 在目标方法执行前执行 获取用户信息  存入线程中再在目标方法中获取用户信息
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //请求头中获取登录用户id
        String userId = request.getHeader("userId");
        //判断userId是否存在
        if (StringUtils.isNoneBlank(userId)){
            //存在就创建WuSerdu对象 设置它的id并存入ThreadLocal中
            WmUser wmUser = new WmUser();
            //将获取到的id封装到wmuser中 然后通过弄好的工具类把获取到的信息设置到线程中
            wmUser.setId(Integer.valueOf(userId));
            WmThreadLocalUtil.setUser(wmUser);
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //后置处理.在目标方法执行之后 清理ThreadLocal中的用户信息,防止内存溢出
        // 并调方法清空数据
        WmThreadLocalUtil.remove();
    }


}
